package net.zoneland.knowledge.service;

import net.zoneland.knowledge.model.*;
import net.zoneland.knowledge.service.bean.ResultInfo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 书记项目service.
 */
public interface SecretaryProjectService {

    /**
     * 保存草稿.
     * @param info 工单信息
     * @param user 当前用户
     */
    void saveDraft(final WorkApplyInfo info, final LoginUserPojo user);

    /**
     * 获取决策信息.
     * @param request 请求
     * @return ResponseResult<Object> 决策信息
     */
    ResultInfo queryTaskDecisions(final HttpServletRequest request);

    /**
     * 书记项目流程工单提交草稿工单.
     *  @param info    工单信息
     * @param processProcessing  流程处理信息
     * @param user    当前用户
     */
    void submitDraft(final WorkApplyInfo info, final ProcessProcessing processProcessing, final LoginUserPojo user);

    /**
     * 初始化书记项目工单信息
     * @param request 请求
     * @param user 当前用户
     * @return WorkApplyInfo 工单信息
     */
    WorkApplyInfo initSecretaryProject(final HttpServletRequest request, final LoginUserPojo user);

    /**
     * 初始化流程处理信息
     * @param request 请求
     * @param user 当前用户
     * @return ProcessProcessing 流程处理信息
     */
    ProcessProcessing initProcessProcessing(final HttpServletRequest request, final LoginUserPojo user);

    /**
     * 解析人员
     * @param orgUserSelectItems 选人框结果
     * @return 人员对象
     */
    List<PartyUserVo> getResolveNextHandler(final List<PartyOrgUserSelectItem> orgUserSelectItems);

    /**
     * 验证选人框参数.
     *   检查人员是否有oa账号
     * @param users 解析后人员
     * @return 检证结果信息，非空：验证失败
     */
    String checkNextHandler(final List<PartyUserVo> users);

    /**
     * 提交工单信息.
     * @param info 工单信息
     * @param processProcessing 流程处理信息
     * @param user 当前用户
     *
     */
    void submit(final WorkApplyInfo info, final ProcessProcessing processProcessing, final LoginUserPojo user);

    /**
     * 获取书记项目工单信息
     * @param request 请求
     * @param user 当前用户
     * @return WorkApplyInfo 工单信息
     */
    WorkApplyInfo getSecretaryProjectInfo(final HttpServletRequest request, final LoginUserPojo user);

    /**
     * 获取下一节点信息.
     * @param request 请求
     * @return 下一节点信息
     */
    NextNodeInfo queryNextNodeInfo(final HttpServletRequest request);

    /**
     * 查询业务流程信息.
     * @param request 请求
     * @return ResultInfo 业务流程信息
     */
    ResultInfo queryBusinessProcess(HttpServletRequest request);
}
